package cn.miaopasi.learn.websocket.base;

import javax.websocket.Session;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 会话管理
 *
 * @author Administrator
 */
public class SessionPool {

    /**
     * 存储会话到Map
     */
    public static Map<String, Session> sessions = new ConcurrentHashMap<>();

    /**
     * <p>方法名称：获取会话.</p>
     * <p>详细描述：根据会话ID获取会话信息.</p>
     * <p>创建时间：2022-01-18 17:37:26</p>
     * <p>创建作者：李兴武</p>
     * <p>修改记录：</p>
     *
     * @param sessionId 会话ID
     * @return 会话Session
     * @author 李兴武
     */
    public static Session get(String sessionId) {
        for (String userId : sessions.keySet()) {
            Session session = sessions.get(userId);
            if (null != session && Objects.equals(session.getId(), sessionId)) {
                return session;
            }
        }
        throw new RuntimeException("sessionId会话不存在");
    }

    /**
     * <p>方法名称：关闭会话.</p>
     * <p>详细描述：根据会话ID找到会话，然后关闭会话.</p>
     * <p>创建时间：2022-01-18 17:14:57</p>
     * <p>创建作者：李兴武</p>
     * <p>修改记录：</p>
     *
     * @param sessionId 会话ID
     * @author "李兴武"
     */
    public static void close(String sessionId) {
        for (String userId : sessions.keySet()) {
            Session session = sessions.get(userId);
            if (null != session && Objects.equals(session.getId(), sessionId)) {
                sessions.remove(userId);
                break;
            }
        }
    }

    /**
     * <p>方法名称：给会话发送消息.</p>
     * <p>详细描述：.</p>
     * <p>创建时间：2022-01-18 17:17:02</p>
     * <p>创建作者：李兴武</p>
     * <p>修改记录：</p>
     *
     * @param sessionId 会话ID
     * @param message   消息内容
     * @author 李兴武
     */
    public static void sendMessage(String sessionId, String message) {
        Session session = get(sessionId);
        if (null != session) {
            session.getAsyncRemote().sendText(message);
        }
    }

    /**
     * <p>方法名称：给全部会话发送消息.</p>
     * <p>详细描述：.</p>
     * <p>创建时间：2022-01-18 17:20:06</p>
     * <p>创建作者：李兴武</p>
     * <p>修改记录：</p>
     *
     * @param message 消息内容
     * @author 李兴武
     */
    public static void sendMessage(String message) {
        for (String userId : sessions.keySet()) {
            Session session = sessions.get(userId);
            if (null != session) {
                session.getAsyncRemote().sendText(message);
            }
        }
    }
}
